import { Lunar } from 'lunar-javascript';

export const convertTimestamp = (dateInput) => {
  // 统一转换为字符串并补零
  const dateStr = String(dateInput).padStart(8, '0');

  // 增强格式校验
  if (!/^\d{8}$/.test(dateStr)) {
    console.error('Invalid date format:', dateInput);
    return {
      dayOfMonth: '--',
      dayOfWeek: '周-',
      lunarDate: '农历错误'
    };
  }

  // 使用更可靠的日期解析方式
  const year = dateStr.substring(0, 4);
  const month = dateStr.substring(4, 6);
  const day = dateStr.substring(6, 8);
  const date = new Date(`${year}-${month}-${day}T00:00:00`);  // ISO格式解析

  // 添加日期有效性验证
  if (isNaN(date.getTime())) {
    console.error('Invalid date value:', dateInput);
    return {
      dayOfMonth: '--',
      dayOfWeek: '周-',
      lunarDate: '农历错误'
    };
  }

  const lunarDate = Lunar.fromDate(date);
  const weekDays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];

  return {
    dayOfMonth: day.padStart(2, '0'),  // 保证两位数格式
    dayOfWeek: weekDays[date.getDay()],
    lunarDate: `${lunarDate.getMonthInChinese()}月${lunarDate.getDayInChinese()}`
  };
}






export const getCurrentTimestamp = () => {
  return Math.floor(Date.now() / 1000); // 将毫秒转换为秒，并去掉小数部分
}


export const getCurrentFormattedDate = () => {
  const now = new Date(); // 获取当前时间
  const year = now.getFullYear(); // 获取年份
  const month = String(now.getMonth() + 1).padStart(2, '0'); // 获取月份，注意月份从0开始，需要加1
  const day = String(now.getDate()).padStart(2, '0'); // 获取日期
  // 拼接成类似 20250222 的格式
  return `${year}${month}${day}`;
}


export const getLastNDays = (n) => {
  const dates = [];
  const oneDayInMilliseconds = 24 * 60 * 60 * 1000; // 一天的毫秒数
  const today = new Date(); // 当前日期

  for (let i = 0; i < n; i++) {
    const previousDate = new Date(today.getTime() - i * oneDayInMilliseconds); // 减去 i 天
    const year = previousDate.getFullYear();
    const month = String(previousDate.getMonth() + 1).padStart(2, '0'); // 获取月份并补零
    const day = String(previousDate.getDate()).padStart(2, '0'); // 获取日期并补零
    const formattedDate = `${year}${month}${day}`; // 格式化为 YYYYMMDD
    dates.push(formattedDate);
  }

  return dates;
}




// 20250306 输出为三月六日

export const formatDateString = (dateInput) => {
  // 统一转换为字符串并补零
  const dateStr = String(dateInput).padStart(8, '0');

  // 增强格式校验
  if (!/^\d{8}$/.test(dateStr)) {
    console.error('Invalid date format:', dateInput);
    return '--/--';
  }

  // 内部函数：将数字转换为中文大写形式
  function toChineseNumber (num) {
    const digits = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
    const tens = ['', '十', '二十', '三十', '四十', '五十', '六十', '七十', '八十', '九十'];
    if (num < 10) {
      return digits[num];
    } else {
      const tenDigit = Math.floor(num / 10);
      const unitDigit = num % 10;
      let result = tens[tenDigit];
      if (unitDigit !== 0) {
        result += digits[unitDigit];
      }
      return result;
    }
  }

  // 从处理后的字符串截取日期部分
  const monthPart = dateStr.substring(4, 6); // 使用处理后的dateStr
  const dayPart = dateStr.substring(6, 8);    // 使用处理后的dateStr

  // 转换为数字
  const monthNum = parseInt(monthPart, 10);
  const dayNum = parseInt(dayPart, 10);

  // 生成中文格式
  const monthStr = toChineseNumber(monthNum) + '月';
  const dayStr = toChineseNumber(dayNum) + '日';

  return monthStr + dayStr;
}


export const timeAgo = (timestamp) => {
  // 修复1：增强类型判断，兼容字符串格式时间戳
  const date = new Date(
    typeof timestamp === 'string' && !isNaN(timestamp) ?
      Number(timestamp) * 1000 :  // 处理数字字符串
      typeof timestamp === 'string' ?
        Date.parse(timestamp) :     // 处理ISO时间字符串
        timestamp * 1000           // 处理数字型秒级时间戳
  );

  const now = Date.now();
  const diffInSeconds = Math.floor((now - date) / 1000); // 总秒差

  // 修复2：使用标准时间间隔（单位：秒）
  const intervals = [
    { unit: '年', seconds: 31536000 },  // 365天
    { unit: '个月', seconds: 2592000 }, // 30天
    { unit: '天', seconds: 86400 },
    { unit: '小时', seconds: 3600 },
    { unit: '分钟', seconds: 60 },
    { unit: '秒', seconds: 1 }
  ];

  // 修复3：正确遍历时间间隔
  for (const { unit, seconds } of intervals) {
    const interval = Math.floor(diffInSeconds / seconds);
    if (interval >= 1) {
      return `${interval}${unit}前`;
    }
  }

  return '刚刚'; // 小于1秒时返回
}